# Обзор

В игру встроены боты. В той или иной степени интеллект их различается по мере добавления новых способностей. В данный момент боты умеют развиваться до МТ и после его постройки "впадают в спячку".

**Интеллект ботов является закрытой информацией.** Сделано это для того чтобы игроки не смогли предугадывать поведение ботов.

Внешне боты ничем не отличаются от игроков, они по честному при постройке или отправке флотов зажигают активность и не берут ресурсы из ниоткуда. Короче говоря - боты ничего себе не "рисуют", а честно добиваются всего теми же средствами, что и обычные игроки.

Единственное отличие в том, что боты виртуально (в виде событий) всегда присутствуют в игре, то есть у них нет аналога входа в игру (логина). Однако перелогин они тоже учитывают и после перелогина устанавливается переменная "Сделать активность на главке" и бот искусственно создает активность, имитируя вход в игру.

Поэтому никаким игровыми средствами нельзя определить - является ли игрок ботом, или человеком. Разве что бот вам не будет отвечать на личные сообщения, хотя и среди игроков-людей есть такие, которые тоже предпочитают не общаться через ЛС.

# Как работает AI

<a href='http://www.youtube.com/watch?feature=player_embedded&v=4DdlG0zwLAI' target='_blank'><img src='http://img.youtube.com/vi/4DdlG0zwLAI/0.jpg' width='425' height=344 /></a>

## Что могут делать боты

- Строить постройки (без очереди построек)
- Строить флот и оборону на верфи
- Проводить исследования
- Следить за списком событий (обзорить)
- Отправлять флоты и сейвиться
- Запускать МПР
- Переименовывать планеты
- Удалять маленькие планеты после неудачной колонизации
- Менять настройки сырья
- Создавать альянсы, но без социального аспекта
- Просматривать галактику
- Изучать статистику
- Пользоваться фалангой
- Перекидывать флот воротами
- Имитировать вход в игру
- Менять имя (время от времени)
- Включать и выключать режим отпуска
- Ждать (ничего не делать)
- Забить на игру

## Как они это делают

В глобальной очереди событий есть специальный тип заданий - "AI", который активирует интеллект ботов, то есть бот решает как именно он будет делать свои действия, перечисленные выше.

У каждой планеты бота есть своя цепочка решений, а также к аккаунту бота прикрепляется глобальная цепочка решений, которая формирует линию развития бота (выбирает стратегию).

В общем случае цепочек может быть сколько угодно.

![whc5138c41c4d579](/imgstore/whc5138c41c4d579.jpg)

# Как программировать AI ботов

Цепочки действий называются **стратегиями**.

Программист создает и редактирует стратегии, которые помещаются в таблицу **botstrat**. После запуска стратегия из этой таблицы "компилируется" и помещается в таблицу **queue** в виде заданий.

То есть стратегия из таблицы **botstat** это "заготовка" (object), которая помещается в таблицу **queue** в виде последовательности действий (instance).

Программирование стратегий производится в специальном визуальном программаторе.

<a href='http://www.youtube.com/watch?feature=player_embedded&v=rCzImdVfRwE' target='_blank'><img src='http://img.youtube.com/vi/rCzImdVfRwE/0.jpg' width='425' height=344 /></a>

# Графический программатор

Среда представлят собой визуальный редактор специализированных графических схем, состоящих из блоков. Графическая схема конвертируется в процессе компиляции в очередь заданий бота.

Основные графические блоки:

![bots002](/imgstore/bots002.jpg)

|Блок|Описание|
|---|---|
|begin|Начало схемы и соответственно очереди заданий|
|end|Конец схемы|
|action|Выполнить какое-нибудь действие из набора|
|condition|Случайный переход. Ветка в сторону всегда означает путь YES, ветка вниз - путь NO. Отличие от обычных условных переходов заключается в том, что ветка YES может выполниться с указанной вероятностью **rnd** (1,100) процентов. 100% означает что условие YES всегда выполняется (имитируется обычный условный переход), при этом число не указывается на схеме|
|branch_name|Название цепочки блоков (так называемый "шампур")|
|branch_target|Указывает на цепочку куда следует перейти|

Графические схемы строятся по определенному принципу: "сверху-вниз и слева-направо":

![bots003](/imgstore/bots003.jpg)

Особая конструкция - это цепочка блоков (шампур), подсвеченная на картинке. Схема в целом выполняется такими цепочками, которые выполняют роль подзадач. А в конце каждой цепочки указывается куда следует перейти далее.

При этом связи между блоками графический редактор рисует самостоятельно, примерно вот так:

![resized_whc51dabba016b15](/imgstore/resized_whc51dabba016b15.jpg)

Пользователь может прикреплять и откреплять блоки от схемы, задавать связи между блоками, а также двигать блоки внутри схемы. При перемещении блоков графический редактор также самостоятельно заботится о сохранении компоновки схемы.

## Выполнение стратегий

Вполнение блоков происходит один за одним, начиная с самого первого (Start).

![resized_whc51dd447fe4417](/imgstore/resized_whc51dd447fe4417.jpg)

- Стратегии бота можно редактировать "на лету", не прерывая активности бота.
- Сделанные изменения в стратегии применяются одновременно ко всем запущенным ботам
- Есть возможности самообучения ботов, то есть бот сам может "на лету" изменять собственную стратегию, без участия программиста. Однако в этом случае стратегия будет одна на всех ботов.
- Есть возможность ветвления стратегий и возможность параллельного исполнения любого количества стратегий.

Работа блока зависит от его типа и содержимого.

После запуска бота через панель администратора выполняется стартовая стратегия `_start`.
